#ifndef __RING_BUF_H__
#define __RING_BUF_H__
//实现一个环形缓冲区
typedef struct
{
    unsigned char *buf; // 缓冲区指针
    unsigned int size; // 缓冲区大小
    unsigned int in; // 写指针
    unsigned int out; // 读指针
}ringBuf_t;
/*
    * 初始化环形缓冲区
    * rb: 环形缓冲区指针
    * buf: 环形缓冲区数据存储区指针
    * size: 环形缓冲区数据存储区大小
    *
*/
void ringBufInit(ringBuf_t *rb, unsigned char *buf, unsigned int size);

/*
    * 向环形缓冲区写入数据
    * rb: 环形缓冲区指针
    * buf: 数据存储区指针
    * len: 数据长度
    * 返回值: 成功写入的数据长度
*/

unsigned int ringBufPut(ringBuf_t *rb, unsigned char *buf, unsigned int len);
/*
    * 从环形缓冲区读取数据
    * rb: 环形缓冲区指针
    * buf: 数据存储区指针
    * len: 数据长度
    * 返回值: 成功读取的数据长度
*/
unsigned int ringBufGet(ringBuf_t *rb, unsigned char *buf, unsigned int len);

/*
    * 获取环形缓冲区有效数据长度
    * rb: 环形缓冲区指针
    * 返回值: 环形缓冲区有效数据长度
*/
unsigned int ringBufLen(ringBuf_t *rb);

/*
    * 获取环形缓冲区剩余空间
    * rb: 环形缓冲区指针
    * 返回值: 环形缓冲区剩余空间
*/

unsigned int ringBufFree(ringBuf_t *rb);
/*
    * 判断环形缓冲区是否已满
    * rb: 环形缓冲区指针
    * 返回值: 1表示已满，0表示未满
*/

unsigned int ringBufFull(ringBuf_t *rb);
/*
    * 判断环形缓冲区是否为空
    * rb: 环形缓冲区指针
    * 返回值: 1表示为空，0表示不为空
*/
unsigned int ringBufEmpty(ringBuf_t *rb);

//单元测试函数，用于测试环形缓冲区是否正常工作
void ringBufTest(void);
#endif
